﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Npgsql;

namespace Golfvision2020
{
    public partial class RegistreradeBokningar : Form
    {

        // Vi tar in förälder-formen så att vi kan komma åt databaskopplingen och markerad medlem i medlemslistan
        private Bokning Bokningsform;

        public RegistreradeBokningar(Bokning bokningsform)
        {
            Bokningsform = bokningsform;
            InitializeComponent();
            getBokningFromDB(); //Hämtar upp en personer-bokning från databasen och lägger in den i respektive rullgardin
            getBokningsTidFromDB(); //Hämtar upp bokningar från databasen och lägger in det i listboxen
            KollaBehörighet(); //Kontrollerar behörighet för formuläret

        }

        private void KollaBehörighet() //Kontrollerar behörigheten för formuläret
        {
            if (Bokningsform.Klubben.Admin == false ||
                Bokningsform.Klubben.Golf_id == "16") // id 16 är banpersonal
            {
                TaBortBokningButton.Enabled = false;
            }
        }

        private void button2_Click(object sender, EventArgs e) //Stänger sidan och går till Bokningsformuläret som uppdaterar sig (koden för det finns i dess formulär)
        {
            this.Close();
            Bokning.ActiveForm.Activate();
        }
        public void getBokningFromDB() //Hämtar upp person-bokningar från databasen och lägger in det i respektive rullgardin
        {
            BokningarListview.Items.Clear();

            NpgsqlCommand command = new NpgsqlCommand("SELECT DISTINCT first_name, last_name, spelare.golf_id FROM spelare, bokning WHERE spelare.golf_id = bokning.golf_id;", Bokningsform.Klubben.conn);
            //command.Parameters.AddWithValue("@golfid", this.iDBox.SelectedItem);
            NpgsqlDataReader dr = command.ExecuteReader();

            while (dr.Read())
            {
                iDBox.Items.Add(dr["golf_id"].ToString());
                nameBox.Text = (dr["first_name"].ToString());
                eNameBox.Text = (dr["last_name"].ToString());
            }
            iDBox.SelectedIndex = 0;

            dr.Close();
        }
        public void getBokningsTidFromDB() //Hämtar upp bokningar och lägger in de i listboxen
        {
            BokningarListview.Items.Clear();

            this.BokningarListview.Items.Clear();
            NpgsqlCommand command = new NpgsqlCommand("select golf_id, tid, speldatum, boknings_id from bokning, tid where bokning.tid_id = tid.tid_id and speldatum = @datum;", Bokningsform.Klubben.conn);
            command.Parameters.AddWithValue("@datum", this.bokadTidDatum.SelectionStart);
            NpgsqlDataReader dr = command.ExecuteReader();
            while (dr.Read())
            {
                ListViewItem bokning = new ListViewItem(dr["boknings_id"].ToString());
                bokning.SubItems.Add(dr["speldatum"].ToString().Substring(0, 10));
                bokning.SubItems.Add(dr["tid"].ToString().Substring(11));
                BokningarListview.Items.Add(bokning);
            }
            dr.Close();
        }

        private void iDBox_SelectedIndexChanged(object sender, EventArgs e) //Ändrar bokningar i listboxen beroende på vilket id som väljs i id rullgardinen
        {
            if (this.ActiveControl != sender)
                return;
            BokningarListview.Items.Clear();
            NpgsqlCommand command = new NpgsqlCommand("select last_name, first_name, speldatum, tid, boknings_id from bokning, tid, spelare where bokning.tid_id = tid.tid_id and spelare.golf_id = bokning.golf_id and bokning.golf_id = (@golfid);", Bokningsform.Klubben.conn); //Ett commandobjekt skapas och knyts till ett sql-uttryck och en db-koppling
            command.Parameters.AddWithValue("@golfid", this.iDBox.SelectedItem);
            NpgsqlDataReader dr = command.ExecuteReader();  //Kommandot körs och resultatet läggs i ett datareader-objekt

            while (dr.Read()) //En loop som rad för rad läser innehållet i datareader'n
            {
                ListViewItem bokning = new ListViewItem(dr["boknings_id"].ToString());
                bokning.SubItems.Add(dr["speldatum"].ToString().Substring(0, 10));
                bokning.SubItems.Add(dr["tid"].ToString().Substring(11));
                BokningarListview.Items.Add(bokning);
                nameBox.Text = (dr["first_name"].ToString());
                eNameBox.Text = (dr["last_name"].ToString());
            }

            dr.Close();

        }

        private void TaBortBokningButton_Click(object sender, EventArgs e) //Tar bort bokning
        {
            if (BokningarListview.SelectedItems.Count < 1)
            {
                MessageBox.Show("Du måste markera en bokad tid i listan");
                return;
            }

            // Öppnar dialogruta med fråga, samt ja och nej-knapp
            DialogResult JaNej = MessageBox.Show("Är du säker på att du vill radera bokningen?", "", MessageBoxButtons.YesNo);

            if (JaNej == DialogResult.Yes)
            {
                // För varje markerad medlem i listan
                foreach (ListViewItem bokning in BokningarListview.SelectedItems)
                {
                    NpgsqlCommand command = new NpgsqlCommand("delete from bokning where boknings_id = '" + bokning.SubItems[0].Text + "'", Bokningsform.Klubben.conn);
                    int antalposter = command.ExecuteNonQuery();
                    if (antalposter == 0)
                        MessageBox.Show("Bokning med id " + bokning.SubItems[0] + " kunde ej tas bort");
                }
                getBokningsTidFromDB();
            }
        }

        private void bokadTidDatum_DateChanged(object sender, DateRangeEventArgs e) //Ändrar bokningar i listboxen beroende på vilket datums som väljs i kalendern
        {
            if (this.ActiveControl != sender)
                return;
            this.BokningarListview.Items.Clear();
            NpgsqlCommand command = new NpgsqlCommand("select golf_id, tid, speldatum, boknings_id from bokning, tid where bokning.tid_id = tid.tid_id and speldatum = @datum;", Bokningsform.Klubben.conn);
            command.Parameters.AddWithValue("@datum", this.bokadTidDatum.SelectionStart);
            NpgsqlDataReader dr = command.ExecuteReader();
            while (dr.Read())
            {
                ListViewItem bokning = new ListViewItem(dr["boknings_id"].ToString());
                bokning.SubItems.Add(dr["speldatum"].ToString().Substring(0, 10));
                bokning.SubItems.Add(dr["tid"].ToString().Substring(11));
                BokningarListview.Items.Add(bokning);
            }
            dr.Close();
        }

        private void BokningarListview_SelectedIndexChanged(object sender, EventArgs e) //Visar vilken person som genomfört en bokning när man markerar bokning i listboxen
        {

            foreach (ListViewItem bokning in BokningarListview.SelectedItems)
            {
                NpgsqlCommand command = new NpgsqlCommand("select distinct first_name, last_name, bokning.golf_id from spelare, bokning where spelare.golf_id = bokning.golf_id and boknings_id = '" + bokning.SubItems[0].Text + "'", Bokningsform.Klubben.conn);
                NpgsqlDataReader dr = command.ExecuteReader();

                while (dr.Read())
                {
                    //iDBox.Items.Add(dr["golf_id"].ToString());
                    iDBox.Text = (dr["golf_id"].ToString());
                    nameBox.Text = (dr["first_name"].ToString());
                    eNameBox.Text = (dr["last_name"].ToString());
                }
                dr.Close();

            }



        }

    }
}
       
             
       
             

